/**
 * @file
 * @brief contiene le tabelle delle frequenze di ogni camion
 *
 * @authors Koldar, Giskard
 * @date 26-06-2013
 *
 */

#ifndef LTMFREQUENCIES_H_
#define LTMFREQUENCIES_H_

#include "fMatrix.h"
#include <stdio.h>

/**racchiude una array grande K puntatori che indicano le matrici delle frequenze per ogni camion
 *
 */
typedef struct LTMFrequencies {
	/**indica un array contenente le matrici delle frequenze di ogni camion*/
	PfMatrix* vehicleMatrices;
	/**indica una cella in memoria contenente il numero di camion*/
	int* K;
} LTMFrequencies;

/**puntatore di servizio*/
typedef LTMFrequencies* PLTMFrequencies;

/**costruisce un nuovo elenco di matrici FMatrix per contenere le frequenze degli archi.
 *
 * \pre
 *  \li K non NULL
 *  \li N non NULL
 *  \li valore puntato da K strettamente positivo
 *  \li valore puntato da N strettamente positivo
 * \post
 *  \li in memoria viene allocata una nuova struttura LTMFrequencies da <b>deallocare manualmente</b>
 *  \li l'array vehicleMatrices e' vuoto con size *K
 *
 * @param K un puntatore ad una cella in cui e' contenuto il numero di camion nell'algoritmo
 * @param N un puntatore ad una cella in cui e' contenuto il numero di vertici all'interno del grafo
 * @return un puntatore ad  una struttura LTMFrequencies
 */
PLTMFrequencies initLTMFrequencies(int* K, int* N);

/**dealloca dalla memoria un oggetto LTMFrequencies
 *
 * \pre
 *  \li obj non NULL
 * \post
 *  \li l'oggetto obj viene deallocato
 *  \li tutte le strutture FMatrix puntate da questo oggetto vengono deallocate
 *  \li la zona di memoria puntata da K <b>non</b>viene alterata
 *
 * @param obj l'oggetto da deallocare
 */
void freeLTMFrequencies(PLTMFrequencies obj);

/**stampa la serie di matrici fMatrix
 *
 * \pre
 *  \li f non NULL
 *  \li f aperto in scrittura
 *  \li obj non NULL
 *
 * @param f il file su cui stampare
 * @param obj l'oggetto da stampare
 */
void printLTMFrequencies(FILE* f,PLTMFrequencies obj);



#endif /* LTMFREQUENCIES_H_ */
